package Day_0202.Spring;

/**
 * @author zxc
 * @date 2023/02/02 16:41
 **/
public class Dependency_injection {
    public static void main(String[] args) {
        /**
         * 依赖注入的方式
         * ===》
         * 一、构造器注入
         * 将被依赖对象通过构造函数的参数注入给依赖对象，并且在初始化对象的时候注入。
         * （1）优点：
         *  对象初始化完成后便可获得可使用的对象。
         *
         * （2）缺点：
         *  当需要注入的对象很多时，构造器参数列表将会很长； 不够灵活。
         *  若有多种注入方式，每种方式只需注入指定几个依赖，那么就需要提供多个重载的构造函数。
         *  ===》
         *  总结 ：
         *  即，通过构造函数的参数，将被依赖对象注入给依赖对象;（注意 ：注入时机，在初始化对象的时候;）
         *
         * 二、setter方法注入
         * IoC Service Provider通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。
         * （1）优点：
         *  灵活。可以选择性地注入需要的对象。
         *
         * （2）缺点：
         *  依赖对象初始化完成后由于尚未注入被依赖对象，因此还不能使用。
         *
         * 三、接口注入
         * 依赖类必须要实现指定的接口，然后实现该接口中的一个函数，该函数就是用于依赖注入。该函数的参数就是要注入的对象。
         * （1）优点
         *  接口注入中，接口的名字、函数的名字都不重要，只要保证函数的参数是要注入的对象类型即可。
         *
         * （2）缺点：
         *  侵入性太强，不建议使用。
         *
         * PS：什么是侵入性？
         * 如果类A要使用别人提供的一个功能，若为了使用这功能，需要在自己的类中增加额外的代码，这就是侵入性。
         */
    }
}
